package com.zqj.project.common.exception.code;

import lombok.Getter;

/**
 * @Description: ExceptionCode
 * @Author: 22001010704 Zhang Qijian
 * @CreateTime: 2024/6/12 23:34
 * @Version: 1.0
 */
@Getter
public enum ExceptionCode implements BaseExceptionCode {

    /**
     * 成功
     */
    SUCCESS(0, "成功"),
    /**
     * 系统繁忙
     */
    SYSTEM_BUSY(-1, "系统繁忙~请稍后再试~"),
    /**
     * 系统维护中
     */
    SYSTEM_TIMEOUT(-2, "系统维护中~请稍后再试~"),
    /**
     * 参数类型解析异常
     */
    PARAM_EX(-3, "参数类型解析异常"),
    /**
     * 运行SQL异常
     */
    SQL_EX(-4, "运行SQL出现异常"),
    /**
     * 空指针异常
     */
    NULL_POINT_EX(-5, "空指针异常"),
    /**
     * 无效参数异常
     */
    ILLEGAL_ARGUMENT_EX(-6, "无效参数异常"),
    /**
     * 请求类型异常
     */
    MEDIA_TYPE_EX(-7, "请求类型异常"),
    /**
     * 加载资源出错
     */
    LOAD_RESOURCES_ERROR(-8, "加载资源出错"),
    /**
     * 统一验证参数异常
     */
    BASE_VALID_PARAM(-9, "统一验证参数异常"),
    /**
     * 操作异常
     */
    OPERATION_EX(-10, "操作异常"),
    /**
     * Mapper类转换异常
     */
    SERVICE_MAPPER_ERROR(-11, "Mapper类转换异常"),
    /**
     * 验证码校验失败
     */
    CAPTCHA_ERROR(-12, "验证码校验失败"),
    /**
     * JSON解析异常
     */
    JSON_PARSE_ERROR(-13, "JSON解析异常"),
    /**
     * OK
     */
    OK(200, "OK"),
    /**
     * 错误的请求
     */
    BAD_REQUEST(400, "错误的请求"),
    /**
     * 未认证的
     */
    UNAUTHORIZED(401, "未认证的"),
    /**
     * 被禁止的
     */
    FORBIDDEN(403, "被禁止的"),
    /**
     * 没有找到资源
     */
    NOT_FOUND(404, "没有找到资源"),
    /**
     * 不支持当前请求类型
     */
    METHOD_NOT_ALLOWED(405, "不支持当前请求类型"),
    /**
     * 请求超过次数限制
     */
    TOO_MANY_REQUESTS(429, "请求超过次数限制"),
    /**
     * 内部服务错误
     */
    INTERNAL_SERVER_ERROR(500, "内部服务错误"),
    /**
     * 网关错误
     */
    BAD_GATEWAY(502, "网关错误"),
    /**
     * 网关超时
     */
    GATEWAY_TIMEOUT(504, "网关超时"),
    /**
     * 请求中必须至少包含一个有效文件
     */
    REQUIRED_FILE_PARAM_EX(1001, "请求中必须至少包含一个有效文件"),
    /**
     * 新增数据失败
     */
    DATA_SAVE_ERROR(2000, "新增数据失败"),
    /**
     * 修改数据失败
     */
    DATA_UPDATE_ERROR(2001, "修改数据失败"),
    /**
     * 批量新增数据过多
     */
    TOO_MUCH_DATA_ERROR(2002, "批量新增数据过多"),
    /**
     * 无效的基本身份验证令牌
     */
    JWT_BASIC_INVALID(40000, "无效的基本身份验证令牌"),
    /**
     * 会话超时
     */
    JWT_TOKEN_EXPIRED(40001, "会话超时，请重新登录"),
    /**
     * 不合法的token
     */
    JWT_SIGNATURE(40002, "不合法的token，请认真比对 token 的签名"),
    /**
     * 缺少token参数
     */
    JWT_ILLEGAL_ARGUMENT(40003, "缺少token参数"),
    /**
     * 生成token失败
     */
    JWT_GEN_TOKEN_FAIL(40004, "生成token失败"),
    /**
     * 解析用户身份错误
     */
    JWT_PARSER_TOKEN_FAIL(40005, "解析用户身份错误，请重新登录！"),
    /**
     * 用户名或密码错误
     */
    JWT_USER_INVALID(40006, "用户名或密码错误"),
    /**
     * 用户已被禁用
     */
    JWT_USER_ENABLED(40007, "用户已经被禁用！"),
    /**
     * 已在另一个设备登录
     */
    JWT_OFFLINE(40008, "您已在另一个设备登录！"),
    /**
     * 登录超时
     */
    JWT_NOT_LOGIN(40009, "登录超时，请重新登录！");

    private final int code;
    private String msg;

    ExceptionCode(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public ExceptionCode build(String msg, Object... param) {
        this.msg = String.format(msg, param);
        return this;
    }

    public ExceptionCode param(Object... param) {
        this.msg = String.format(this.msg, param);
        return this;
    }

}